﻿#-*- coding: utf-8 -*-
"""
PythonTextureAssembler v0 - Assemble des textures en un seul fichier. 
Par Julien (à la base), corrigé et un peu amélioré par Guillaume.
Version de base qui semble fonctionner.

Les images doivent porter la même extension.
Les fichiers doivent avoir un nom de base genre "World" pour "World1.png", "World2.png"...
La matrice définit l'organisation du puzzle (quelle pièce va à quel endroit).
"""

from umage import *

def debug_img(img):
	for r in img:
		print r

def assemble(fn, mat, ext, v):
	"""Warning: mat is destroyed."""
	pic=[]
	for id_e, e in enumerate(matrix): #pour chaque ligne,
		if v: print "Matrix's row %d" % id_e
		#on charge les morceaux
		for id, n in enumerate(e):
			#on crée un nom de fichier, par exemple "World1.png"
			final = "%s%d.%s" % (fn, n, ext)
			e[id] = load(final)
			if v: print "  Loaded: %s..." % final
		block = e[0] #première tuile
		if v: print "  Column 1"
		#pour chaque suivante dans la ligne,
		for id in range(1, len(e)):
			if v: print "  Column %d" % (id+1)
			#pas grave si on massacre e[0] !
			#pour chaque ligne, on l'ajoute au bloc de base
			for y, row in enumerate(e[id]):
				block[y].extend(row)
		#référence perdue, pas un problème. Faut pas oublier que la boucle fera l'équivalent d'un e=qqch,
		#donc e pointera vers autre chose mais l'objet ne sera pas détruit (car référencé ailleurs)
		pic.extend(block)
	return pic

def adjust(pic, color, v):
	"""Warning: pic is directly altered."""
	if v: print "Checking whether there's anything to be adjusted..."
	old_max = max = 0 #on cherche la ligne la plus longue
	for r in pic:
		if len(r)>max:
			old_max = max
			max = len(r)
	if old_max==0:
		if v: print "  Nothing to do !"
	else:
		if v: print "Filling rows with %s when needed..." % str(color)
		for y in range(len(pic)):
			#on ajuste la taille si nécessaire
			x = len(pic[y])
			if x<maxi:
				#on ajoute "ce qu'il faut" de manière VISIBLE
				if v: print "  Row %d" % (y+1)
				pic[y].extend([color] * (max-x))


print "Welcome to the Python Texture Assembler!"

v = True #mode verbeux
fn = raw_input("Enter the base name of the files\n")
matrix = eval(raw_input("Enter the organization matrix\n"))
extension = raw_input("Enter the format (e.g.: png)\n")

output = assemble(fn, matrix, extension, v)
#debug_img(pic) #ça va pas être possible pour de grosses images...
adjust(output, (255, 0, 255), v)
if v: print "Saving..."
save(output) #on enregistre l'image sous le nom new.png
if v: print "Done!"